package com.sxj.corejava.code02_运算符;

/**
 * @author 石小俊
 * @date 2024年03月02日 10:16
 */
public class Test04_逻辑运算符 {

    public static void main(String[] args) {
        // &:逻辑与,左右两边的条件必须同时为true,其结果才是true
        // 只要有任意一个条件为false,其结果一定是false
        System.out.println(5 > 2 & 5 < 10);
        System.out.println(5 > 2 & 5 < 4);
        // &&:短路与
        System.out.println(5 > 2 && 5 < 10);
        System.out.println(5 > 2 && 5 < 4);

        // 此时执行了5 > 10 与 5 < 20的判断
        System.out.println(5 > 10 & 5 < 20);
        // 此时发现报错了,说明1 / 0 == 0的判断执行了
//        System.out.println(5 > 10 & 1 / 0 == 0);
        // 此时只执行了5 > 10
        // 由于5 > 10已经是false了,与的判断只要有任意一个条件为false,其结果一定是false
        // 因此,右边的条件不管其值是true还是false,都对最终结果没有影响
        // 如果还执行右边的判断,效率较低
        System.out.println(5 > 10 && 5 < 20);
        // 此时发现没有报错,说明1 / 0 == 0的判断没有执行
        System.out.println(5 > 10 && 1 / 0 == 0);

        // |:逻辑或,左右两边的条件必须同时为false,其结果才是false
        // 只要有任意一个为true,其结果一定是true
        System.out.println(1 > 5 | 5 > 10);
        // ||:短路或
        System.out.println(10 > 5 | 5 > 10);
        // 逻辑或:不管左边条件是true还是false,都会对右边的条件进行判断
//        System.out.println(10 > 5 | 1 / 0 == 0);
        // 短路或:如果左边的条件值为true,则直接返回结果true,不再对右边的条件进行判断
        System.out.println(10 > 5 || 1 / 0 == 0);

        // !:逻辑非,取反,取反的对象必须是一个boolean类型的值
        // 如果原来的条件结果是true,则最终结果为false
        // 如果原来的条件结果是false,则最终结果为true
        System.out.println(!(5 > 10));
        System.out.println(!true);
        System.out.println(!false);
    }

}
